var express = require('express')
var router = express.Router();
var User = require('./modules/users')
// 进行加密  npm i blueimp-md5
var md5=require('blueimp-md5')

//首页
router.get('/', function (req, res) {
   
    res.render('index.html', {
         //渲染页面的时候，将此req.session.user的信息传给页面
        user:req.session.user
    })
})
//渲染注册页面
router.get('/register', function (req, res) {
    res.render('register.html')
})
//处理注册页面的信息
router.post('/register', function (req, res) {
    //1.获取表单数据
    var body = req.body
    //2.操作数据库
    //找是否有重复的数据
    User.findOne({
        // %or：[] 代表的是或者，即其中有任意一个符号条件
        $or: [
            { email: body.email },
            { nickname: body.nickname}]
    }, (err, data) => {
        // 如果出错，则结束
        if (err) {
             //express提供了一个json（）自动将对象转换成json字符串和JSON.stringify（）效果一样的
            // err_code 是人为定义的，可以来区别各种情况
            
            return next(err)
           /* 
            如果不借助中间件的话，这样写也可以，有点繁琐
           return res.status(500).json({
                err_code: 500,
                message: '服务端出现错误'
            }) */
        }
        // 如果存在，则结束
        if (data) {
           
            return res.status(200).json({
                err_code: 1,
                message: '邮箱或者昵称已经存在'
            })
        }
        //将密码进行加密 用md5 加密了两次
        body.password =md5(md5(body.password))
    //到这里数据肯定存在，且符号要求，保存数据（如果有问题就重启mongod服务器！！！！！）
      new User(body).save(function (err, user) {
          if (err) {
                return next(err)
           /*      return res.status(500).json({
                    err_code: 500,
                    message: '服务端出现错误'
                }) */
          }
          //!!!! 将数据库存入的数据，赋值给req.session.xx（随便起名字）
          // 注册成功，使用session来记录用户的登录状态
          req.session.user=user
            res.status(200).json({
                err_code:0,
                message: '注册成功'
            })
       /*     服务端重定向只针对同步请求才有效，对异步请求无效，
          ajax就是一个异步的，则写 res.redirect('/')没有效果，
          则在客户端实现跳转。
    */
        })
           
       
    })

    //3.发送响应
})
//渲染登录页面
router.get('/login', function (req, res) {
    res.render('login.html')
})
//处理登录页面的信息
router.post('/login', function (req, res,next) {
    //1.获取表单数据
    let body =req.body
    //2. 查询数据库用户名密码是否正确
    User.findOne({
        email: body.login_email,
        password: md5(md5(body.login_password))
    }, function (err, data) {
        if (err) {

            return next(err)
          /*   return res.status(500).json({
                err_code: 500,
                message: err.message
            }) */
        }
        if (!data) {
            return res.status(200).json({
                err_code: 1,
                message: 'password or email is invalid'
            })
        }
        req.session.user = data
        return res.status(200).json({
            err_code: 0,
            message:'ok'
        })
    })
    //3.发送响应数据
  
})
//注销账号，退出
router.get('/logout', function (req, res) {
    //清楚登录状态
    req.session.user = null
    // a标签，发送的是同步请求，可以使用redirect（）进行跳转
    res.redirect('/login')
 })
module.exports = router